#include <nds.h>
#include <stdio.h>
#include <math.h>
#include "warhol.h"

int main(void)
{
  consoleDemoInit();
  printf("\nEFECTO WARHOL\n");
  
  // Configuración de pantalla principal
  REG_DISPCNT = MODE_5_2D	// Modo5 (permite modo extendido)
    | DISPLAY_BG2_ACTIVE;	// Activar fondo 2
  
  // Configuración de bloque A de la VRAM
  VRAM_A_CR = VRAM_ENABLE	// Habilitar
    | VRAM_A_MAIN_BG;		// Asignar a Main (al comienzo)
  
  VRAM_B_CR = VRAM_ENABLE	// Habilitar VRAM B
    | VRAM_B_MAIN_BG;	
  
  // Configuración de fondo 2
  BGCTRL[2] = BG_MAP_BASE(0)	// Al comienzo de la VRAM
    | BgSize_B8_512x512; 	// 512x512, 8bpp
  
  
  // Matriz de transformación
  bgTransform[2]->xdx = 512;
  bgTransform[2]->ydx = 0;
  bgTransform[2]->xdy = 0;
  bgTransform[2]->ydy = 512;
  bgTransform[2]->dx  = 0;
  bgTransform[2]->dy  = 0;
  
  uint8 rgb[3];
  uint8 gris;
  uint16 *color= warholPal;
  int i,j,k;
  uint8 *mapa = (uint8*)warholBitmap;
  static uint8 linea [256];
  
  for (i=0;i<256;i++){
    rgb[0]= color[i] & 31; //rojo
    rgb[1]= (color[i] >>5) & 31;//verde
    rgb[2]= color[i] >>10;//azul
    gris = (30*rgb[0] + 59*rgb[1] + 11*rgb[2])/100;
    BG_PALETTE[i]=RGB15(gris,gris,gris)|BIT(15);
  }//Hasta aquí imagen en escala de grises
  
  //Recorremos el mapa para comprobar color de gris y hacerlo apuntar una de las dos posicines de la paleta
  for(i=0;i<256; i++){
	for(j=0;j<256;j++){
		if((BG_PALETTE[mapa[i*256+j]] & 31 ) > 20){
			linea[j] = 1;
		}else{
			linea[j] = 0;
		}
	}
	dmaCopy(linea,BG_GFX+i*256,256);
	for(k=0; k<256;k++)
		linea[k] = linea[k]+2;
	dmaCopy(linea,BG_GFX+128+i*256,256);
	for(k=0; k<256;k++)
		linea[k] = linea[k]+2;
	dmaCopy(linea,BG_GFX+256*256+i*256,256);
	for(k=0; k<256;k++)
		linea[k] = linea[k]+2;
	dmaCopy(linea,BG_GFX+256*256+128+i*256,256);
	}
	BG_PALETTE[0]= RGB15(20,0,0);
	BG_PALETTE[1]=	RGB15(31,31,31);
	BG_PALETTE[2]=    RGB15(0,0,25);
	BG_PALETTE[3]=   RGB15(25,31,25);
	BG_PALETTE[4]=    RGB15(10,10,0);
	BG_PALETTE[5]=	   RGB15(25,25,31);
	BG_PALETTE[6]=	   RGB15(0,0,20);
	BG_PALETTE[7]=	   RGB15(31,31,20);

	return 0;
}
	
	
